package bavaria.hightech.application;

import java.lang.reflect.Proxy;
import bavaria.hightech.banking.Bank;
import bavaria.hightech.banking.BankImpl;
import bavaria.hightech.banking.Money;
import bavaria.hightech.banking.Money.Currency;
import bavaria.hightech.conditions.FixedDepositConditions.ContractPeriod;
import bavaria.hightech.logging.DebugHandler;

public class BankLauncher {
        
        private static final boolean PROXYMODE = true;

        /**
         * @param args
         * @throws Exception 
         */
        public static void main(String[] args) throws Exception {
                
//              Properties sysProps = System.getProperties();
//              sysProps.setProperty("java.util.logging.config.file","logging.properties");
                
                
                Bank bank = new BankImpl("Raiffeisenbank Stauden eg",2, 5);
                Bank bankproxy;

                // use the general Proxy class and an InvocationHandler based on
                // reflection
                if (PROXYMODE) {
                        DebugHandler handler = new DebugHandler(bank);
                        bankproxy = (Bank) Proxy.newProxyInstance(Bank.class.getClassLoader(), new Class[] { Bank.class }, handler);
                      
                        // testIt(bankproxy2);          
                }
                bankproxy.process();
                //evtl. andere Startzeit setzen
//              bankproxy.getTimeEmitter().setCalendar(2011, 12, 1, 9, 0); 

                // Konten erstellen
                Integer accNumFritz = bankproxy.createGiroAccount("Fritz"); // account number: 100000
                Integer accNumMerkel = bankproxy.createGiroAccount("Merkel"); // account number: 100001
                Integer accNumWagner = bankproxy.createFixedDepositAccount("Wagner", ContractPeriod.THREE_MONTH); // account                                                                                                                                                            // number:                                                                                                                                                              // 1000
                Integer accNumKienle = bankproxy.createFixedDepositAccount("Kienle", ContractPeriod.ONE_MONTH); // account                                                                                                                                                      // number:                                                                                                                                                      // 1001

                // einzahlen
                bankproxy.deposit(new Money(10000, Currency.EURO), accNumFritz);
                bankproxy.deposit(new Money(49923, Currency.DOLLAR), accNumMerkel);
                bankproxy.deposit(new Money(500000, Currency.EURO), accNumWagner);
                bankproxy.deposit(new Money(5000000, Currency.EURO), accNumKienle);
                
                //500 auszahlen --> Exception fliegt und wird im Logger aufgezeichnet
                bankproxy.payOut(new Money(50000, Currency.EURO), accNumFritz); 
                //gueltige ueberweisung von 1000 nach 1001
                bankproxy.assign(new Money(10000, Currency.EURO), accNumWagner, accNumKienle); 
                // Konto 9999 existiert nicht --> Exception fliegt und wird im Logger aufgezeichnet
                bankproxy.assign(new Money(10000, Currency.EURO), accNumWagner, 9999); 
                //Einzahlung funktioniert, im Log wird der ungewöhnlich hohe Betrag aber registiert und kann auf Schwarzgeld überprüft werden.
                bankproxy.deposit(new Money(300000000,Currency.EURO), accNumKienle); 
                
                

                
                }
                
                
                
                
        

                
                
                
                
                
                
                
                
                

        }

